package cn.tedu.oop;

/**
 * @Author 金帮嘉诚
 * @Date 2021-06-10 周四 19:07
 */
/*本类用于测试 静态或非静态的成员变量、静态与父类同名的方法不能多态*/
public class TestDemo2 {
    public static void main(String[] args) {
        //继承和重写
        Cat2 c=new Cat2();
        System.out.println("c.sum = " + c.sum);//子类的变量
        c.eat();//重写
        c.play();//子类独有

        //多态对象
        /*口诀1.父类引用指向子类对象，
        * 口诀2.编译看左边，运行看右边*/
        Animal2 ac=new Cat2();
        /*2.多态中，成员变量的使用都是父类的*/
        System.out.println("ac.sum = " + ac.sum);
        /*3.多态中，方法的声明看的是父类的，实现使用的是子类的*/
        ac.eat();
        /*4.多态中，如果父子类有同名的静态方法，使用的是父类的，
        * 因为多态对象被看作是父亲类型*/
        ac.play();

    }
}
class Animal2{
    int sum=10;
    public void eat(){
        System.out.println("Animal eat");
    }
    public static void play(){
        System.out.println("Animal play");
    }
}
/*多态的前提是继承加重写*/
class Cat2 extends Animal2{
    int sum=100;
    @Override/*@Override是一个注解，加在方法上，表示这是一个重写的方法*/
    public void eat(){
        System.out.println("Cat eat");
    }
    /*静态资源属于类，不存在重写的现象
    * 只是两个类中恰好有两个同名的静态方法*/
//    @Override//静态方法没有重写，即使子类静态方法与父类静态方法同名也不是重写
    public static void play(){
        System.out.println("Cat play");
    }
}
